﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.DirectoryServices.AccountManagement;
using MTO.Framework.DirectoryServices.AccountManagement.Enums;
using MTO.Framework.DirectoryServices.AccountManagement.Interfaces;

namespace MTO.Framework.DirectoryServices.AccountManagement.LDAP
{
    /// <summary>
    /// Représente les objet de type "userProxy" au niveau de Active Directory.
    /// </summary>
    /// <remarks>Dans un environnement avec seulement un AD, aucun object de type userProxy ne devrait exister. Dans le cadre de l'utilisation AD LDS les "userProxy" sont les user Active Directory importé dans l'instance AD LDS. En aucun cas on devrait pouvoir créer des "userProxy" où les supprimer.</remarks>
    [DirectoryRdnPrefix("CN")]
    [DirectoryObjectClass("userProxy")]
    internal class LDAPUserProxyPrincipal : LDAPUserPrincipal
    {

        public LDAPUserProxyPrincipal(PrincipalContext context)
            : base(context)
        {
            this.TypeUserAccount = TypesUserAccounts.Interne;
        }

        public LDAPUserProxyPrincipal(PrincipalContext context, string samAccountName, string password, bool isEnabled)
            : base(context, samAccountName, password, isEnabled)
        {
            this.TypeUserAccount = TypesUserAccounts.Interne;
        }

        public LDAPUserProxyPrincipal(PrincipalContext context, IUserAccount userAccount)
            : base(context, userAccount)
        {
            this.TypeUserAccount = TypesUserAccounts.Interne;
        }

        public static new LDAPUserProxyPrincipal FindByIdentity(PrincipalContext context, string identityValue)
        {
            return (LDAPUserProxyPrincipal)FindByIdentityWithType(context, typeof(LDAPUserProxyPrincipal), identityValue);
        }
        public static new LDAPUserProxyPrincipal FindByIdentity(PrincipalContext context, IdentityType identityType, string identityValue)
        {
            return (LDAPUserProxyPrincipal)FindByIdentityWithType(context, typeof(LDAPUserProxyPrincipal), identityType, identityValue);
        }
    }
}
